<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Pro Git - 简体中文版
</title>
    <meta content="http://www.w3.org/1999/xhtml; charset=utf-8" http-equiv="Content-Type"/>
    <link href="stylesheet.css" type="text/css" rel="stylesheet"/>
    <style type="text/css">
		@page { margin-bottom: 5.000000pt; margin-top: 5.000000pt; }</style>
  </head>
  <body class="calibre">
<h2 id="calibre_toc_62" class="calibre3">底层命令 (Plumbing) 和高层命令 (Porcelain)</h2>

<p class="calibre2">本书讲解了使用 <code class="calibre9">checkout</code>, <code class="calibre9">branch</code>, <code class="calibre9">remote</code> 等共约 30 个 Git 命令。然而由于 Git 一开始被设计成供 VCS 使用的工具集而不是一整套用户友好的 VCS，它还包含了许多底层命令，这些命令用于以 UNIX 风格使用或由脚本调用。这些命令一般被称为 "plumbing" 命令（底层命令），其他的更友好的命令则被称为 "porcelain" 命令（高层命令）。</p>

<p class="calibre2">本书前八章主要专门讨论高层命令。本章将主要讨论底层命令以理解 Git 的内部工作机制、演示 Git 如何及为何要以这种方式工作。这些命令主要不是用来从命令行手工使用的，更多的是用来为其他工具和自定义脚本服务的。</p>

<p class="calibre2">当你在一个新目录或已有目录内执行 <code class="calibre9">git init</code> 时，Git 会创建一个 <code class="calibre9">.git</code> 目录，几乎所有 Git 存储和操作的内容都位于该目录下。如果你要备份或复制一个库，基本上将这一目录拷贝至其他地方就可以了。本章基本上都讨论该目录下的内容。该目录结构如下：</p>

<pre class="calibre8"><code class="calibre9">$ ls
HEAD
branches/
config
description
hooks/
index
info/
objects/
refs/
</code></pre>

<p class="calibre2">该目录下有可能还有其他文件，但这是一个全新的 <code class="calibre9">git init</code> 生成的库，所以默认情况下这些就是你能看到的结构。新版本的 Git 不再使用 <code class="calibre9">branches</code> 目录，<code class="calibre9">description</code> 文件仅供 GitWeb 程序使用，所以不用关心这些内容。<code class="calibre9">config</code> 文件包含了项目特有的配置选项，<code class="calibre9">info</code> 目录保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件。<code class="calibre9">hooks</code> 目录包住了第六章详细介绍了的客户端或服务端钩子脚本。</p>

<p class="calibre2">另外还有四个重要的文件或目录：<code class="calibre9">HEAD</code> 及 <code class="calibre9">index</code> 文件，<code class="calibre9">objects</code> 及 <code class="calibre9">refs</code> 目录。这些是 Git 的核心部分。<code class="calibre9">objects</code> 目录存储所有数据内容，<code class="calibre9">refs</code>  目录存储指向数据 (分支) 的提交对象的指针，<code class="calibre9">HEAD</code> 文件指向当前分支，<code class="calibre9">index</code> 文件保存了暂存区域信息。马上你将详细了解 Git 是如何操纵这些内容的。</p>

</body>
</html>
